package com.itc.bi;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateTestMain {

    // 日期格式正则表达式 (yyyy-MM-dd)
    private static final String DATE_PATTERN = "^\\d{4}-\\d{1,2}-\\d{1,2}$";

    // 日期时间格式正则表达式 (yyyy-MM-dd HH:mm:ss)
    private static final String DATETIME_PATTERN = "^\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}$";

    // 判断是否为日期格式并验证是否合法
    public static boolean isDate(String dateString) {
        if (!dateString.matches(DATE_PATTERN)) {
            return false;
        }
        return isValidDate(dateString, "yyyy-MM-dd");
    }

    // 判断是否为日期时间格式并验证是否合法
    public static boolean isDateTime(String dateString) {
        if (!dateString.matches(DATETIME_PATTERN)) {
            return false;
        }
        return isValidDate(dateString, "yyyy-MM-dd HH:mm:ss");
    }

    // 验证日期是否合法
    private static boolean isValidDate(String dateString, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        // 禁用宽松模式，严格解析日期
        sdf.setLenient(false);
        try {
            sdf.parse(dateString);
            return true;
        } catch (ParseException e) {
            return false;
        }
    }

    public static void main(String[] args) {
        String date1 = "2021-2-2";
        String date2 = "2024-1-5 10:5:25";
        String date3 = "2024-12-31 23:59:59";
        String date4 = "2024-13-32"; // 错误格式的日期
        String date45= "2024-1-1 12:12"; // 错误格式的日期

        System.out.println("date1 是日期格式吗？" + isDate(date1));         // true
        System.out.println("date2 是日期时间格式吗？" + isDateTime(date2)); // true
        System.out.println("date3 是日期时间格式吗？" + isDateTime(date3)); // true
        System.out.println("date4 是日期格式吗？" + isDate(date4));         // false
        System.out.println("date45 是日期格式吗？" + isDateTime(date45));         // false
    }
}

